package com.cwz.mq.ack.utils;

import org.springframework.amqp.core.*;

/**
 * @program: w-demo
 * @description: mq 的 message 配置
 * @author: Wen
 **/
public class MessageHelper {
	/**
	 * @Description: 生产者发送消息的默认 Message 转换类
	 * @Author: Wen
	 * @param obj:		消息主体
	 * @return: org.springframework.amqp.core.Message
	 **/
	public static Message defaultObjToMsg(Object obj) {
		Message message = MessageBuilder.withBody(JsonUtils.objToStr(obj).getBytes()).build();
		message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
		message.getMessageProperties().setContentType(MessageProperties.CONTENT_TYPE_JSON);
		return message;
	}

	/**
	 * @Description: 生产者发送消息的延时队列 Message 转换类
	 * @Author: Wen
	 * @param obj:		消息主体
	 * @param delay:	延时时间（毫秒）
	 * @return: org.springframework.amqp.core.Message
	 **/
	public static Message delayedObjToMsg(Object obj, Integer delay) {
		Message message = MessageBuilder.withBody(JsonUtils.objToStr(obj).getBytes()).build();
		message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
		message.getMessageProperties().setDelay(delay);
		message.getMessageProperties().setContentType(MessageProperties.CONTENT_TYPE_JSON);
		return message;
	}

	/**
	 * @Description: 消费者把转换的 Message 转化为对应的 T 类型 obj
	 * @Author: Wen
	 * @param message:
	 * @param clazz:
	 * @return: T
	 **/
	public static <T> T defaultMsgToObj(Message message, Class<T> clazz) {
		return JsonUtils.strToObj(new String(message.getBody()), clazz);
	}
}
